Azure Key Vault 连接字符串和 N 层设计

Azure Key Vault Connection Strings and N-Layered Design

此问题与以下可能有帮助的post相关:Azure DevOps CI/CD 和从源代码管理中分离连接字符串

我目前正在基于 Imar Spaanjaars 的一篇名为 ASP.NET N-Layered Applications

的文章开展 N 层项目

我正在尝试实现 Azure Key Vault,我想你可以说,从应用程序本身抽象秘密。

目标

我想使用这个 N 层概念实现 Azure Key Vault。我有一个示例项目位于 NLayer-Spaanjaars.ContactManager

问题

我正在尝试弄清楚如何使用 Key Vault Syntax Reference 通过 Entity Framework 正确检索机密(连接字符串)。

更新2019/2/22

如评论中所述,我试图找出如何在运行时 injectoverride 连接字符串与非核心上的 Key Vault 的值.Net Web API 应用

我通过像这样修改我的 DbContext 来设法让它工作:

public class MyContext : BaseDataContext {
    public MyContext()
            : this(GetDbConnection()) {
    }

    public MyContext(string connectionString)
            : base(connectionString) {
    }

    public static string GetDbConnection() {
        // Get the value from the AppSettings section in the Web.config file that will be updated by Key Vault
        var connectionString = ConfigurationManager.AppSettings["{key-vault-secret-name}"];
        // Return the connection string value above, if blank, use the connection string value expected in the Web.config
        return string.IsNullOrWhiteSpace(connectionString) ? "MyContext" : connectionString;
    }
}